package bdsimple.impl.mysql;

import bdsimple.abstractfactory.AbstractFactoryDAO;
import bdsimple.dao.base.CiudadDAO;
import bdsimple.dao.base.CiudadDistanciaDAO;
import bdsimple.dto.base.CiudadDTO;
import bdsimple.dto.base.CiudadDistanciaDTO;
import dao.base.impl.BaseDTO;
import dao.base.impl.Reference;

public class CiudadDistanciaDTOImpl extends BaseDTO implements
		CiudadDistanciaDTO {

	// ---------------------------------------------------------------------------

	public CiudadDistanciaDTOImpl() {
		super(CiudadDistanciaDAO.class);
	}

	// ---------------------------------------------------------------------------

	private int distancia;
	private int precioPasaje;

	// ---------------------------------------------------------------------------

	private final Reference<CiudadDTO> ciudadDTORefPartida = //
	new Reference<CiudadDTO>();

	// ---------------------------------------------------------------------------

	private final Reference<CiudadDTO> ciudadDTORefObjetivo = //
	new Reference<CiudadDTO>();

	// ---------------------------------------------------------------------------

	public int getDistancia() {
		return distancia;
	}

	public void setDistancia(int distancia) {
		this.distancia = distancia;
	}

	// ---------------------------------------------------------------------------

	public int getPrecioPasaje() {
		return precioPasaje;
	}

	public void setPrecioPasaje(int precioPasaje) {
		this.precioPasaje = precioPasaje;
	}

	// ---------------------------------------------------------------------------

	public Reference<CiudadDTO> getCiudadDTORefPartida() {
		return ciudadDTORefPartida;
	}
	
	public CiudadDTO getCiudadDTOPartida() {
		if (ciudadDTORefPartida.getRefValue() == null) {
			if (ciudadDTORefPartida.getRefIdent() != 0) {
				try {

					// Lazy load the departmentDTORef
					CiudadDAO ciudadDAO = (CiudadDAO) AbstractFactoryDAO
							.getFactoryDAO(). //
							getDAO(CiudadDAO.class, connectionBean);

					ciudadDTORefPartida.setRefValue( //
							(CiudadDTO) ciudadDAO.loadById(ciudadDTORefPartida
									.getRefIdent()));

				} catch (Exception e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}

		return ciudadDTORefPartida.getRefValue();
	}

	public void setCiudadPartida(CiudadDTO ciudadDTORef) {
		this.ciudadDTORefPartida.setRefValue(ciudadDTORef);
	}

	// ---------------------------------------------------------------------------

	public Reference<CiudadDTO> getCiudadDTORefObjetivo() {
		return ciudadDTORefObjetivo;
	}
	
	public CiudadDTO getCiudadDTOObjetivo() {
		if (ciudadDTORefObjetivo.getRefValue() == null) {
			if (ciudadDTORefObjetivo.getRefIdent() != 0) {
				try {

					// Lazy load the departmentDTORef
					CiudadDAO ciudadDAO = (CiudadDAO) AbstractFactoryDAO
							.getFactoryDAO(). //
							getDAO(CiudadDAO.class, connectionBean);

					ciudadDTORefObjetivo.setRefValue( //
							(CiudadDTO) ciudadDAO.loadById(ciudadDTORefPartida
									.getRefIdent()));

				} catch (Exception e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}

		return ciudadDTORefObjetivo.getRefValue();
	}

	public void setCiudadObjetivo(CiudadDTO ciudadDTORef) {
		this.ciudadDTORefObjetivo.setRefValue(ciudadDTORef);
	}

	// ---------------------------------------------------------------------------

}
